import java.util.Arrays;

class public Main {
	public static void main(String[] args) {
		int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
        // 排序前:
        System.out.println(Arrays.toString(ns));


        // 冒泡排序
        for (int i=0; i<(ns.length-1); i++) {//PC,process counter
        	for(int j=0; j<(ns.length-i-1); j++) {//从(ns.length-1)~1
        		if (ns[j] > ns[j+1]) {
        			//交换ns[j]和ns[j+1]的位置
        			int tmp = ns[j];
        			ns[j] = ns[j+1];
        			ns[j+1] = tmp;
        		}
        	}//j为Pointer,从n次~1次,min从后推前,整体从小到大
        }
        //排序后
        System.out.println(Array.toString(ns));
        //冒泡排序的特点是，每一轮循环后，最大的一个数被交换到末尾，因此，下一轮循环就可以“刨除”最后的数，每一轮循环都比上一轮循环的结束位置靠前一位。


        //实际上，Java的标准库已经内置了排序功能，我们只需要调用JDK提供的Arrays.sort()就可以排序
        int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
        //jdk内置的java.util.Arrays.sort函数功能
        Array.sort(ns);//必须注意，对数组排序实际上修改了数组本身。也就是修改了Array[]中的每一个index地址指向
        System.out.println(Arrays.toString(ns));


        //练习
        //降序排序
        int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
        // 排序前:
        System.out.println(Arrays.toString(ns));

        for (int i=0; i<(ns.length-1); i++) {
        	for (int j=0; j<(ns.length-1-i); j++) {
        		if (ns[j] < ns[j+1]) {
        			tmp = ns[j+1];
        			ns[j+1] = ns[j];
        			ns[j] = tmp;
        		}
        	}
        }
        System.out.println(Arrays.toString(ns));

        if (Arrays.toString(ns).equals("[96, 89, 73, 65, 50, 36, 28, 18, 12, 8]")) {
            System.out.println("测试成功");
        } else {
            System.out.println("测试失败");
        }

	}
}

/*
# 对'数组Array'进行'排序'是程序中非常基本的需求。
常用的‘排序算法’有 冒泡排序、插入排序、快速排序等

*/

/*
排序前，这个数组在内存中表示如下：

                   ┌──────────────────────────────────┐
               ┌───┼──────────────────────┐           │
               │   │                      ▼           ▼
         ┌───┬─┴─┬─┴─┬───┬────────┬───┬───────┬───┬──────┬───┐
ns ─────>│░░░│░░░│░░░│   │"banana"│   │"apple"│   │"pear"│   │
         └─┬─┴───┴───┴───┴────────┴───┴───────┴───┴──────┴───┘
           │                 ▲
           └─────────────────┘
调用Arrays.sort(ns);排序后，这个数组在内存中表示如下：

                   ┌──────────────────────────────────┐
               ┌───┼──────────┐                       │
               │   │          ▼                       ▼
         ┌───┬─┴─┬─┴─┬───┬────────┬───┬───────┬───┬──────┬───┐
ns ─────>│░░░│░░░│░░░│   │"banana"│   │"apple"│   │"pear"│   │
         └─┬─┴───┴───┴───┴────────┴───┴───────┴───┴──────┴───┘
           │                              ▲
           └──────────────────────────────┘
原来的3个字符串在内存中均没有任何变化，但是ns数组的每个元素指向变化了。

*/